package com.ruoyi.cloudpc.service.impl;

import com.ruoyi.cloudpc.domain.CloudProduct;
import com.ruoyi.cloudpc.domain.CloudProductTag;
import com.ruoyi.cloudpc.domain.CloudTag;
import com.ruoyi.cloudpc.mapper.CloudProductMapper;
import com.ruoyi.cloudpc.service.ICloudProductService;
import com.ruoyi.cloudpc.service.ICloudProductTagService;
import com.ruoyi.cloudpc.service.ICloudTagService;
import com.ruoyi.common.utils.PicUrlUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * 商品信息Service业务层处理
 *
 * @author Ten
 * @date 2025-09-13
 */
@Service
public class CloudProductServiceImpl implements ICloudProductService {
    @Autowired
    private CloudProductMapper cloudProductMapper;
    @Autowired
    private ICloudProductTagService cloudProductTagService;
    @Autowired
    private ICloudTagService cloudTagService;
    @Autowired
    private PicUrlUtil picUrlUtil;

    /**
     * 查询商品信息
     *
     * @param id 商品信息主键
     * @return 商品信息
     */
    @Override
    public CloudProduct selectCloudProductById(Long id) {
        return cloudProductMapper.selectCloudProductById(id);
    }

    /**
     * 查询商品信息列表
     *
     * @param cloudProduct 商品信息
     * @return 商品信息
     */
    @Override
    public List<CloudProduct> selectCloudProductList(CloudProduct cloudProduct) {
        List<CloudProduct> cloudProducts = cloudProductMapper.selectCloudProductList(cloudProduct);
        for (CloudProduct product : cloudProducts) {
            List<CloudTag> cloudTags = cloudProductMapper.selectCloudTagList(product);
            product.setCloudTagList(cloudTags);
        }
        return cloudProducts;
    }

    /**
     * 新增商品信息
     *
     * @param cloudProduct 商品信息
     * @return 结果
     */
    @Transactional
    @Override
    public int insertCloudProduct(CloudProduct cloudProduct) {
        cloudProduct.setCreateByAndTime();
        cloudProduct.setPicUrl(picUrlUtil.handlePicUrl(cloudProduct.getPicUrl()));
        int result = cloudProductMapper.insertCloudProduct(cloudProduct);
        if (cloudProduct.getCloudTagList() != null && !cloudProduct.getCloudTagList().isEmpty()) {
            cloudProduct.getCloudTagList()
                    .stream()
                    // 转换关系实体
                    .map(item -> new CloudProductTag(cloudProduct.getId(), item.getId()))
                    // 保存商品的标签信息
                    .forEach(item -> cloudProductTagService.insertCloudProductTag(item));
        }
        return result;
    }


    /**
     * 修改商品信息
     *
     * @param cloudProduct 商品信息
     * @return 结果
     */
    @Transactional
    @Override
    public int updateCloudProduct(CloudProduct cloudProduct) {
        cloudProduct.setUpdateByAndTime();
        cloudProduct.setPicUrl(picUrlUtil.handlePicUrl(cloudProduct.getPicUrl()));
        int result = cloudProductMapper.updateCloudProduct(cloudProduct);

        // 先删再增
        cloudProductTagService.deleteCloudProductTagByProductId(cloudProduct.getId());
        if (cloudProduct.getCloudTagList() != null && !cloudProduct.getCloudTagList().isEmpty()) {
            cloudProduct.getCloudTagList()
                    .stream()
                    // 转换关系实体
                    .map(item -> new CloudProductTag(cloudProduct.getId(), item.getId()))
                    // 保存商品的标签信息
                    .forEach(item -> cloudProductTagService.insertCloudProductTag(item));
        }
        return result;
    }

    /**
     * 批量删除商品信息
     *
     * @param ids 需要删除的商品信息主键
     * @return 结果
     */
    @Override
    public int deleteCloudProductByIds(Long[] ids) {
        return cloudProductMapper.deleteCloudProductByIds(ids);
    }

    /**
     * 删除商品信息信息
     *
     * @param id 商品信息主键
     * @return 结果
     */
    @Override
    public int deleteCloudProductById(Long id) {
        return cloudProductMapper.deleteCloudProductById(id);
    }
}
